// 2.设计一个Car类，其中包含了汽车的基本属性和方法，如车牌号、品牌、颜色、价格和驾驶、停车、加油等方法。
// 然后创建了一个ElectricCar子类，其中除了继承了Car类的基本属性和方法外，还包含了电池容量和续航里程属性以及充电和驾驶方法。
// 同时，需要重写了drive方法，在驾驶电动汽车时会检查电池续航里程是否足够，如果不够就无法驾驶。（继承关系必须使用）

class Car(val licensePlate: String, val brand: String, val color: String, val price: Double) {
  def drive(): Unit = {
    println("Driving the car")
  }
  
  def park(): Unit = {
    println("Parking the car")
  }
  
  def refuel(): Unit = {
    println("Refueling the car")
  }
}

class ElectricCar(licensePlate: String, brand: String, color: String, price: Double, val batteryCapacity: Double, var range: Double) extends Car(licensePlate, brand, color, price) {
  override def drive(): Unit = {
    if (range <= 0) {
      println("Cannot drive. Battery needs to be charged.")
    } else {
      println("Driving the electric car")
      range -= 10 // assuming each drive consumes 10 miles of range
    }
  }
  
  def charge(): Unit = {
    println("Charging the electric car")
    range = batteryCapacity
  }
}

val myCar = new Car("ABC123", "Toyota", "Red", 20000.0)
myCar.drive() // Driving the car

val myElectricCar = new ElectricCar("DEF456", "Tesla", "Black", 40000.0, 75.0, 250.0)
myElectricCar.drive() // Cannot drive. Battery needs to be charged.

myElectricCar.charge()
myElectricCar.drive() // Driving the electric car

// 在这个例子中，我们首先定义了一个名为Car的类，包含汽车的基本属性和方法：车牌号、品牌、颜色、价格以及驾驶、停车和加油方法。
// 然后，我们定义了一个名为ElectricCar的子类，继承了Car类的属性和方法，并添加了电池容量和续航里程属性，以及充电和驾驶方法。
// 同时，我们重写了drive方法，在驾驶电动汽车时会检查电池续航里程是否足够，如果不够就无法驾驶。
// 最后，我们创建了两个实例对象：myCar和myElectricCar，并使用它们的方法进行操作。注意，在电动汽车中驾驶时必须先充电，否则会提示无法驾驶。